import java.util.ArrayList;
import java.util.List;


public class Trabajo {
	
	//Variables de instancia
	
	private String autor;
	private String titulo;
	private String resumen;
	private String archivoPDF;
	private List<String> areasInteres = new ArrayList<String>();
	private List<Revisor> listaDeRevisores = new ArrayList<Revisor>();
	private String estadoDeRevision = "Sin revisar";
	private List<EstadoDeCorreccion> notas = new ArrayList<EstadoDeCorreccion>();
	private EstadoDeCorreccion notaFinal;
	private ManejadorDeEstados observer;
	
	public ManejadorDeEstados getObserver() {
		return observer;
	}


	public void setObserver(ManejadorDeEstados observer) {
		this.observer = observer;
	}


	//Constructor
	public Trabajo(String titulo,String resumen,String autor,String archivo,List<String> areas){
		
		this.setAutor(autor);
		this.setTitulo(titulo);
		this.setResumen(resumen);
		this.setArchivoPDF(archivo);
		this.setAreasInteres(areas);
		
	}
	
	
	//Getters y setters
	
	public ManejadorDeEstados getObserver() {
		return observer;
	}
	public void setObserver(ManejadorDeEstados observer) {
		this.observer = observer;
	}
	public String getAutor() {
		return autor;
	}
	public void setAutor(String autor) {
		this.autor = autor;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public String getResumen() {
		return resumen;
	}
	public void setResumen(String resumen) {
		this.resumen = resumen;
	}
	public String getArchivoPDF() {
		return archivoPDF;
	}
	public void setArchivoPDF(String archivoPDF) {
		this.archivoPDF = archivoPDF;
	}
	public List<String> getAreasInteres() {
		return areasInteres;
	}
	public void setAreasInteres(List<String> areasInteres) {
		this.areasInteres = areasInteres;
	}
	public List<Revisor> getListaDeRevisores() {
		return listaDeRevisores;
	}
	public void setListaDeRevisores(List<Revisor> listaDeRevisores) {
		this.listaDeRevisores = listaDeRevisores;
	}
	public String getEstadoDeRevision() {
		return estadoDeRevision;
	}
	public void setEstadoDeRevision(String estadoDeRevision) {
		this.estadoDeRevision = estadoDeRevision;
	}
	public List<EstadoDeCorreccion> getNotas() {
		return notas;
	}
	public void setNotas(List<EstadoDeCorreccion> notas) {
		this.notas = notas;
	}
	public EstadoDeCorreccion getNotaFinal() {
		return notaFinal;
	}
	public void setNotaFinal(EstadoDeCorreccion notaFinal) {
		this.notaFinal = notaFinal;
	}
	
	//Operaciones
	public void asignarRevisores(Revisor rev1,Revisor rev2,Revisor rev3){
		
		this.setListaDeRevisores(this.getListaDeRevisores().add(rev1));
		this.setListaDeRevisores(this.getListaDeRevisores().add(rev2));
		this.setListaDeRevisores(this.getListaDeRevisores().add(rev3));
	}
	
	public void aceptarTrabajo(){
		
		this.getNotas().add(new Aceptado(""));
		this.getObserver().actualizarEstado(this);
		
	}
	
	public void aceptarTrabajo(String comentario){
		
		this.getNotas().add(new Aceptado(comentario));
		this.getObserver().actualizarEstado(this);
		
	}
	
	public void rechazarTrabajo(String comentario){
		
		this.getNotas().add(new Rechazado(comentario));
		this.getObserver().actualizarEstado(this);
	}
	
	public void aceptarConModificacion(String comentario){
		
		this.getNotas().add(new AceptadoConModificacion(comentario));
		this.getObserver().actualizarEstado(this);
	}

}
